{
 "cells": [
  {
   "metadata": {},
   "cell_type": "code",
   "outputs": [],
   "execution_count": null,
   "source": "",
   "id": "6bb2be3d534acb61"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "DataFrame pandas 包中的核心类  一列称为Series",
   "id": "467deb17893d15fe"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T06:16:10.511395Z",
     "start_time": "2025-06-26T06:16:10.506373Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import  numpy as np\n",
    "import pandas as pd\n",
    "from IPython.utils.io import raw_print\n",
    "from pandas.core.interchange.dataframe_protocol import DataFrame\n",
    "\n",
    "np.random.seed(999)\n",
    "df = pd.DataFrame({\n",
    "    \"first\": np.random.randint(10,size=(6)) ,\n",
    "    \"second\": np.random.randint(20,size=(6))\n",
    "})\n",
    "print(df)\n",
    "s= pd.Series(np.random.randint(20,size=(6)))\n",
    "print(s)"
   ],
   "id": "9ac4c81e2739f7f1",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   first  second\n",
      "0      0      19\n",
      "1      5      16\n",
      "2      1      13\n",
      "3      8       8\n",
      "4      1       8\n",
      "5      9      16\n",
      "0     5\n",
      "1     2\n",
      "2    11\n",
      "3    11\n",
      "4     4\n",
      "5     6\n",
      "dtype: int64\n"
     ]
    }
   ],
   "execution_count": 3
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "定位分割",
   "id": "9b603200dfca0978"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T06:39:25.836241Z",
     "start_time": "2025-06-26T06:39:25.829264Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import  numpy as np\n",
    "import pandas as pd\n",
    "np.random.seed(999)\n",
    "df = pd.DataFrame({\n",
    "    \"first\": np.random.randint(10,size=(6)) ,\n",
    "    \"second\": np.random.randint(20,size=(6))\n",
    "})\n",
    "\n",
    "# 定位一列 很常用\n",
    "print(df['first'],df['second'],df[['first','second']])\n",
    "df['third']=df['first']+df['second']\n",
    "print(df)\n",
    "#定位一行 但不常用\n",
    "print(df.loc[4])\n",
    "#定位单个元素 也不常用\n",
    "print(df.loc[4]['first'],df.loc[4,'first'])\n",
    "#定位一小块元素 常用\n",
    "print(df.loc[2:4   ,  'first':'third'])\n",
    "print(df.loc[ :3    ,  :  ])"
   ],
   "id": "21021950355e7d0e",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    0\n",
      "1    5\n",
      "2    1\n",
      "3    8\n",
      "4    1\n",
      "5    9\n",
      "Name: first, dtype: int64 0    19\n",
      "1    16\n",
      "2    13\n",
      "3     8\n",
      "4     8\n",
      "5    16\n",
      "Name: second, dtype: int64    first  second\n",
      "0      0      19\n",
      "1      5      16\n",
      "2      1      13\n",
      "3      8       8\n",
      "4      1       8\n",
      "5      9      16\n",
      "   first  second  third\n",
      "0      0      19     19\n",
      "1      5      16     21\n",
      "2      1      13     14\n",
      "3      8       8     16\n",
      "4      1       8      9\n",
      "5      9      16     25\n",
      "first     1\n",
      "second    8\n",
      "third     9\n",
      "Name: 4, dtype: int64\n",
      "1 1\n",
      "   first  second  third\n",
      "2      1      13     14\n",
      "3      8       8     16\n",
      "4      1       8      9\n",
      "   first  second  third\n",
      "0      0      19     19\n",
      "1      5      16     21\n",
      "2      1      13     14\n",
      "3      8       8     16\n"
     ]
    }
   ],
   "execution_count": 16
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "DataFrame可视化",
   "id": "d96843be55067667"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T07:12:08.480811Z",
     "start_time": "2025-06-26T07:12:08.386189Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import  numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "x=np.linspace(-10,10,20,endpoint=False)\n",
    "y_1=12*x+44\n",
    "y_2=-3*x-6\n",
    "df=pd.DataFrame({\n",
    "    \"x\":x,\n",
    "    \"y1\":y_1,\n",
    "    \"y2\":y_2,\n",
    "})\n",
    "print(df)\n",
    "plt.title(\"xxxx\")\n",
    "plt.xlabel(\"xxx\")\n",
    "sns.lineplot(df,x=\"x\",y='y1')\n",
    "sns.lineplot(df,x=\"x\",y=\"y2\")\n",
    "plt.show()"
   ],
   "id": "9800fd4a005afb6c",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "       x     y1    y2\n",
      "0  -10.0  -76.0  24.0\n",
      "1   -9.0  -64.0  21.0\n",
      "2   -8.0  -52.0  18.0\n",
      "3   -7.0  -40.0  15.0\n",
      "4   -6.0  -28.0  12.0\n",
      "5   -5.0  -16.0   9.0\n",
      "6   -4.0   -4.0   6.0\n",
      "7   -3.0    8.0   3.0\n",
      "8   -2.0   20.0   0.0\n",
      "9   -1.0   32.0  -3.0\n",
      "10   0.0   44.0  -6.0\n",
      "11   1.0   56.0  -9.0\n",
      "12   2.0   68.0 -12.0\n",
      "13   3.0   80.0 -15.0\n",
      "14   4.0   92.0 -18.0\n",
      "15   5.0  104.0 -21.0\n",
      "16   6.0  116.0 -24.0\n",
      "17   7.0  128.0 -27.0\n",
      "18   8.0  140.0 -30.0\n",
      "19   9.0  152.0 -33.0\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/xieweig/anaconda3/lib/python3.11/site-packages/seaborn/_oldcore.py:1119: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.\n",
      "  with pd.option_context('mode.use_inf_as_na', True):\n",
      "/home/xieweig/anaconda3/lib/python3.11/site-packages/seaborn/_oldcore.py:1119: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.\n",
      "  with pd.option_context('mode.use_inf_as_na', True):\n",
      "/home/xieweig/anaconda3/lib/python3.11/site-packages/seaborn/_oldcore.py:1119: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.\n",
      "  with pd.option_context('mode.use_inf_as_na', True):\n",
      "/home/xieweig/anaconda3/lib/python3.11/site-packages/seaborn/_oldcore.py:1119: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.\n",
      "  with pd.option_context('mode.use_inf_as_na', True):\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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gYGBDBkyhAMHDtTBFdTcihUrsFgs1R5r1qw54/PuvPPOKu179+5dj5XXTKtWrarUPXny5LM+xxjDU089RUxMDP7+/lx55ZVs2rSpniquuT179nDXXXfRunVr/P39adu2LVOmTPnDn1tXubdvvvkmrVu3xs/Pj169evHjjz+etf0PP/xAr1698PPzo02bNrz99tv1VOmFmTZtGhdffDFBQUFEREQwdOhQtm3bdtbnnOnf9datW+up6pp56qmnqtQcFRV11ue46n2F6n8fWSwWxowZU217V72vtUkrN9eS4uJihg8fTp8+fXj//ferPG6z2bjxxhtp2rQpq1atIjs7m9GjR2OMYebMmWd83QcffJD//Oc/zJ8/n7CwMCZNmsSgQYNYu3Ytnp6edXlJ56xv376kpaVVOvfkk0+ybNkyLrroorM+9/rrr2fOnDnlX/v4+NRJjbXtmWee4e677y7/ulGjRmdt/9JLLzF9+nQ++OADOnTowHPPPcd1113Htm3bCAoKqutya2zr1q3Y7Xbeeecd2rVrR0pKCnfffTcFBQW88sorZ32us9/bBQsW8OCDD/Lmm29y2WWX8c477zBw4EA2b95My5Ytq7RPTU3lhhtu4O677+bDDz/kp59+4v7776dp06bccsstDriCc/fDDz8wZswYLr74YkpLS3niiSfo378/mzdvJjAw8KzP3bZtW6XVfps2bVrX5V6wrl27smzZsvKvz/a70pXvK8CaNWuw2WzlX6ekpHDdddcxfPjwsz7PFe9rrTFSq+bMmWNCQkKqnF+8eLHx8PAwBw8eLD83b9484+vra3Jycqp9rWPHjhlvb28zf/788nMHDx40Hh4e5ptvvqn12mtLcXGxiYiIMM8888xZ240ePdrcdNNN9VNULYqNjTWvvfbaObe32+0mKirKvPDCC+XnioqKTEhIiHn77bfroMK69dJLL5nWrVuftY0r3NtLLrnE3HvvvZXOderUyUyePLna9o888ojp1KlTpXP33HOP6d27d53VWFcyMzMNYH744Ycztlm+fLkBzNGjR+uvsFowZcoU071793Nu35DuqzHGjB8/3rRt29bY7fZqH3fV+1qbNNRVT37++Wfi4uKIiYkpPzdgwACsVitr166t9jlr166lpKSE/v37l5+LiYkhLi6O1atX13nNNfXll1+SlZXFnXfe+YdtV6xYQUREBB06dODuu+8mMzOz7gusBS+++CJhYWH06NGD559//qxDP6mpqaSnp1e6j76+vvTr18+p7+OZ5OTk0KRJkz9s58z3tri4mLVr11a6JwD9+/c/4z35+eefq7QfMGAAv//+OyUlJXVWa13IyckBOKf7mJCQQHR0NNdccw3Lly+v69JqxY4dO4iJiaF169aMHDmS3bt3n7FtQ7qvxcXFfPjhh/zlL3/5w022XfG+1hYFn3qSnp5OZGRkpXOhoaH4+PiQnp5+xuf4+PgQGhpa6XxkZOQZn+MM3n//fQYMGECLFi3O2m7gwIF89NFHfP/997z66qusWbOGq6++GqvVWk+V1sz48eOZP38+y5cvZ+zYsbz++uvcf//9Z2x/8l6dfv+d/T5WZ9euXcycOZN77733rO2c/d5mZWVhs9nO655U9284MjKS0tJSsrKy6qzW2maMYeLEiVx++eXExcWdsV10dDTvvvsun332GQsXLqRjx45cc801rFy5sh6rPX+XXnop//rXv/j222/5xz/+QXp6On379iU7O7va9g3lvgJ8/vnnHDt27Kx/dLrqfa1Vju5ycmZTpkwxwFmPNWvWVHrOmYa67r77btO/f/8q5729vc28efOq/f4fffSR8fHxqXL+2muvNffcc0/NLuo81OT69+/fbzw8PMynn3563t/v0KFDxtvb23z22We1dQnnrCbXetKnn35qAJOVlVXt4z/99JMBzKFDhyqd/+tf/2oGDBhQ69dyLmpyvQcPHjTt2rUzd91113l/P0fe2+ocPHjQAGb16tWVzj/33HOmY8eO1T6nffv2ZurUqZXOrVq1ygAmLS2tzmqtbffff7+JjY01+/fvP+/nDho0yAwePLgOqqo7+fn5JjIy0rz66qvVPt5Q7qsxxvTv398MGjTovJ/nivf1Qmhy81mMHTuWkSNHnrVNq1atzum1oqKi+PXXXyudO3r0KCUlJVX+2qj4nOLiYo4ePVqp1yczM5O+ffue0/e9EDW5/jlz5hAWFsaQIUPO+/tFR0cTGxvLjh07zvu5F+pC7vXJTyvt3LmTsLCwKo+f/ERJeno60dHR5eczMzPPeO/r2vle76FDh7jqqqvo06cP77777nl/P0fe2+qEh4fj6elZpXfnbPckKiqq2vZeXl7V3ndnNG7cOL788ktWrlxJ8+bNz/v5vXv35sMPP6yDyupOYGAg8fHxZ/zZawj3FWDv3r0sW7aMhQsXnvdzXfG+XggFn7MIDw8nPDy8Vl6rT58+PP/886SlpZW/+S1ZsgRfX1969epV7XN69eqFt7c3S5cuZcSIEQCkpaWRkpLCSy+9VCt1nc35Xr8xhjlz5vA///M/eHt7n/f3y87OZv/+/ZXCQX25kHudnJwMcMa6W7duTVRUFEuXLiUhIQEoG4v/4YcfePHFF2tW8AU6n+s9ePAgV111Fb169WLOnDl4eJz/CLkj7211fHx86NWrF0uXLuXmm28uP7906VJuuummap/Tp08f/vOf/1Q6t2TJEi666KIa/bzXJ2MM48aNY9GiRaxYsYLWrVvX6HWSk5Od5h6eK6vVypYtW7jiiiuqfdyV72tFc+bMISIightvvPG8n+uK9/WCOLrLqaHYu3evSU5ONk8//bRp1KiRSU5ONsnJySYvL88YY0xpaamJi4sz11xzjUlKSjLLli0zzZs3N2PHji1/jQMHDpiOHTuaX3/9tfzcvffea5o3b26WLVtmkpKSzNVXX226d+9uSktL6/0a/8iyZcsMYDZv3lzt4x07djQLFy40xhiTl5dnJk2aZFavXm1SU1PN8uXLTZ8+fUyzZs1Mbm5ufZZ9XlavXm2mT59ukpOTze7du82CBQtMTEyMGTJkSKV2Fa/VGGNeeOEFExISYhYuXGg2btxoRo0aZaKjo536Wo05Nbx19dVXmwMHDpi0tLTyoyJXvLfz58833t7e5v333zebN282Dz74oAkMDDR79uwxxhgzefJkc8cdd5S33717twkICDATJkwwmzdvNu+//77x9vau0bBufbvvvvtMSEiIWbFiRaV7WFhYWN7m9Ot97bXXzKJFi8z27dtNSkqKmTx5sgGcZrjyTCZNmmRWrFhhdu/ebX755RczaNAgExQU1CDv60k2m820bNnSPProo1Ueayj3tTYp+NSS0aNHVztPYvny5eVt9u7da2688Ubj7+9vmjRpYsaOHWuKiorKH09NTa3ynOPHj5uxY8eaJk2aGH9/fzNo0CCzb9++eryyczdq1CjTt2/fMz4OmDlz5hhjjCksLDT9+/c3TZs2Nd7e3qZly5Zm9OjRTnttJ61du9ZceumlJiQkxPj5+ZmOHTuaKVOmmIKCgkrtKl6rMWUfaZ8yZYqJiooyvr6+5k9/+pPZuHFjPVd//ubMmXPGOUAVueq9nT17tomNjTU+Pj6mZ8+elT7ePXr0aNOvX79K7VesWGESEhKMj4+PadWqlXnrrbfqueKaOdM9rPgzevr1vvjii6Zt27bGz8/PhIaGmssvv9x89dVX9V/8ebr11ltNdHS08fb2NjExMWbYsGFm06ZN5Y83pPt60rfffmsAs23btiqPNZT7WpssxhhTb91LIiIiIg6kj7OLiIiI21DwEREREbeh4CMiIiJuQ8FHRERE3IaCj4iIiLgNBR8RERFxGwo+IiIi4jYUfERERMRtKPiIiIiI21DwEREREbeh4CMiLu3w4cNERUUxderU8nO//vorPj4+fPvtt1x77bVcf/31nNyd59ixY7Rs2ZInnngCgGeeeYaYmBiys7PLnz9kyBD+9Kc/Ybfb6/diRKTOaa8uEXF5ixcvZujQoaxevZpOnTqRkJDAjTfeyOuvv87BgweJj49nypQpjB8/npEjR7Jr1y5Wr16Nt7c3NpuNK664gsjISBYtWsTbb7/N5MmTWb9+PbGxsY6+NBGpZQo+ItIgjBkzhmXLlnHxxRezfv161qxZg5+fHwCffPIJd9xxBxMnTmTGjBkkJyfToUOH8ufu3r2bHj16cP/99zNz5kzeffddbrvtNkddiojUIQUfEWkQjh8/TlxcHPv37+f333+nW7dulR5PTExk3rx5vPXWW9x7771Vnv/uu+9yzz33cOuttzJ//vz6KltE6pnm+IhIg7B7924OHTqE3W5n7969lR4rLCxk7dq1eHp6smPHjmqfv3LlSjw9PdmzZw+lpaX1UbKIOICCj4i4vOLiYm677TZuvfVWnnvuOe666y4yMjLKH580aRIeHh58/fXXvPHGG3z//feVnr9gwQIWLlzIihUr2L9/P88++2x9X4KI1BMNdYmIy3v44Yf59NNPWb9+PY0aNeKqq64iKCiI//73v3z11VcMGzaMn3/+mZ49e/Lkk0/ywQcfsGHDBkJDQzlw4ADdunXj6aefZty4cSxdupQbb7yRlStX0rt3b0dfmojUMgUfEXFpK1as4LrrrmP58uVcfvnlAOzbt49u3boxadIkZs+ezfjx43nssccAKC0t5bLLLqNVq1bMnz+f6667Di8vL77++mssFgsAEydO5Msvv2TdunU0atTIYdcmIrVPwUdERETchub4iIiIiNtQ8BERERG3oeAjIiIibkPBR0RERNyGgo+IiIi4DQUfERERcRsKPiIiIuI2FHxERETEbSj4iIiIiNtQ8BERERG3oeAjIiIibkPBR0RERNzG/weLeZDffR8HIgAAAABJRU5ErkJggg=="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 4
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": " 读取csv文件 和excel  comma seperate v",
   "id": "3651ee87512bcfcf"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T08:04:57.899641Z",
     "start_time": "2025-06-26T08:04:57.835743Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import  numpy as np\n",
    "r= pd.read_csv(\"/home/xieweig/文档/ss.csv\")\n",
    "print(r)\n",
    "r1 = pd.read_excel(\"/home/xieweig/文档/ddd.xlsx\",\"Sheet2\")\n",
    "\n",
    "\n",
    "r1['sn']=r1['身高']*r1['年龄']\n",
    "print(r1)\n",
    "r1['name_length']=r1['名字'].map(lambda x :  len(x) )\n",
    "print(r1)\n",
    "\n",
    "r1.to_excel(\"/home/xieweig/文档/xxx.xlsx\")\n"
   ],
   "id": "7bdac033bfbae8e3",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "         名字   身高  年龄\n",
      "0  zhangsan  174  22\n",
      "1      lisi  170  23\n",
      "2    wangwu  173  14\n",
      "         名字   身高  年龄    sn\n",
      "0  zhangsan  174  22  3828\n",
      "1      lisi  170  23  3910\n",
      "2    wangwu  173  14  2422\n",
      "3   wangwu2  178  14  2492\n",
      "         名字   身高  年龄    sn  name_length\n",
      "0  zhangsan  174  22  3828            8\n",
      "1      lisi  170  23  3910            4\n",
      "2    wangwu  173  14  2422            6\n",
      "3   wangwu2  178  14  2492            7\n"
     ]
    }
   ],
   "execution_count": 11
  },
  {
   "metadata": {},
   "cell_type": "code",
   "outputs": [],
   "execution_count": null,
   "source": "DataFr",
   "id": "538f3161d0744bc9"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "DataFrame对象 和Series对象 通过values方发转化为 ndarray",
   "id": "8dd4930fd56957d"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T08:10:52.717069Z",
     "start_time": "2025-06-26T08:10:52.711300Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import  numpy as np\n",
    "import pandas as pd\n",
    "from IPython.utils.io import raw_print\n",
    "\n",
    "np.random.seed(999)\n",
    "df = pd.DataFrame({\n",
    "    \"first\": np.random.randint(10,size=(6)) ,\n",
    "    \"second\": np.random.randint(20,size=(6))\n",
    "})\n",
    "print(df)\n",
    "s= pd.Series(np.random.randint(20,size=(6)))\n",
    "print(s,s.__class__)\n",
    "print(s.values,s.values.__class__)\n",
    "\n",
    "print(df['first'].values,df['first'].values.__class__)"
   ],
   "id": "de11eb32ee7ce2c5",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   first  second\n",
      "0      0      19\n",
      "1      5      16\n",
      "2      1      13\n",
      "3      8       8\n",
      "4      1       8\n",
      "5      9      16\n",
      "0     5\n",
      "1     2\n",
      "2    11\n",
      "3    11\n",
      "4     4\n",
      "5     6\n",
      "dtype: int64 <class 'pandas.core.series.Series'>\n",
      "[ 5  2 11 11  4  6] <class 'numpy.ndarray'>\n",
      "[0 5 1 8 1 9] <class 'numpy.ndarray'>\n"
     ]
    }
   ],
   "execution_count": 15
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
